package model;

import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;

/**
 * 
 *Es el encargado de lanzar la asignacion automatica de revisores.
 */
public class Temporizador {


	private Timer timer = new Timer();
	private TimerTask asignacion;
	private Date fechaTopeRecepcion;
	private Boolean estaActivado = false; 

	

	/**
	 * CONSTRUCTOR
	 * @param fechaTopeRecepcion recibe la fecha en que se disparará la asignacion automatica
	 * @param sistema recibe el sistema para poder mandarle el mensaje necesario para lanzar la asignacion
	 * @param cfp es el CFP donde se realizara la asignacion de revisores
	 */

	public Temporizador(Date fechaTopeRecepcion, SistemaWeb sistema, CFP cfp) {
		
		this.asignacion = new AsignacionTask(sistema, cfp);
		this.fechaTopeRecepcion = fechaTopeRecepcion;
	}

	/**
	 * Activa el temporizador
	 */
	public void activar() {

		this.timer.schedule(this.asignacion, this.fechaTopeRecepcion);
		this.estaActivado = true;
	}

	
	public TimerTask getAsignacion() {
		return asignacion;
	}

	public void setAsignacion(TimerTask asignacion) {
		this.asignacion = asignacion;
	}

	public Date getFechaTopeRecepcion() {
		return fechaTopeRecepcion;
	}

	public void setFechaTopeRecepcion(Date fechaTopeRecepcion) {
		this.fechaTopeRecepcion = fechaTopeRecepcion;
	}

	public Timer getTimer() {
		return timer;
	}
	
	public Boolean getEstaActivado() {
		return estaActivado;
	}

	public void setEstaActivado(Boolean estaActivado) {
		this.estaActivado = estaActivado;
	}

	private class AsignacionTask extends TimerTask {

		private SistemaWeb sistema;
		private CFP cfp;

		public AsignacionTask(SistemaWeb sistema, CFP cfp) {

			this.sistema = sistema;
			this.cfp = cfp;
		}

		@Override
		public void run() {

			this.sistema.asignacionAutomaticaDeRevisoresATrabajos(this.cfp);
		}

	}

}
